﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Planisoft.Entities;
using PagedList;

namespace Planisoft.DAO
{
    public class TrabajadorDAO: MasterDataAcces, ItrabajadorDAO
    {
        public List<Trabajador> GetAllFromTrabajador()
        {
            
            //return Context.Trabajadors.Skip(1).Take(10).ToList();

           var query = from p in Context.Trabajadors
                        orderby p.IdTrabajador
                        select p;

            return query.Skip(0).Take(10).ToList();
            

        }

        public List<Trabajador> GetAllFromTrabajadorByCriterio(string criterio)
        {
            throw new NotImplementedException();
        }

        public Trabajador GetAllFromTrabadorById(int id)
        {
            return Context.Trabajadors.Find(id);            
        }

        public void AddTrabajador(Trabajador trabajador)
        {
            Context.Trabajadors.Add(trabajador);
            Context.SaveChanges();
        }

        public void UpdateTrabajador(Trabajador trabajador)
        {
            Context.Entry(trabajador).State = System.Data.EntityState.Modified;
            Context.SaveChanges();
        }

        public void RemoveTrabajador(int id)
        {
            throw new NotImplementedException();
        }


        public List<Trabajador> GetFromTrabajadorByCriterio(int id)
        {
            var query = from p in Context.Trabajadors
                        where p.IdTrabajador.Equals(id)
                        select p;
                
 
            return query.ToList();
        }


        public List<Trabajador> GetAllFromTrabajadorByPlanilla()
        {
            var query = from tp in Context.Trabajadors 
                            join conf in Context.ConfiguraTrabajadors on tp.IdTrabajador equals conf.IdTrabajador
                            join cto in Context.Contratoes on tp.IdTrabajador equals cto.IdTrabajador
                            where cto.IdSituacionContrato == 2  
                            select tp;
            return query.ToList();
        }

        public IPagedList<Trabajador> GetAllFromTrabajadorByCriterio(string criterio, int page, int size)
        {
            if (criterio == "")
                criterio = null;
            var query = from p in Context.Trabajadors
                        select p;

            if (criterio != null)
            {
                query = query.Where(p => p.NroDoc.ToUpper().StartsWith(criterio.ToUpper()) ||
                                    p.Nombre.ToUpper().StartsWith(criterio.ToUpper()) ||
                                    p.ApPaterno.ToUpper().StartsWith(criterio.ToUpper()) ||
                                    p.ApMaterno.ToUpper().StartsWith(criterio.ToUpper()) ||
                                    p.NroDoc.ToUpper().Contains(criterio.ToUpper()) ||
                                    p.Nombre.ToUpper().Contains(criterio.ToUpper()) ||
                                    p.ApPaterno.ToUpper().Contains(criterio.ToUpper()) ||
                                    p.ApMaterno.ToUpper().Contains(criterio.ToUpper()));
            }

            return query.OrderBy(p => p.NroDoc).ToPagedList(page, size);
        }

    }
}
